package main

import "fmt"

func main() {
	// 使用常规的 for 循环遍历切片
	//var arr [5]int = [...]int{10, 20, 30, 40, 50}
	//slice := arr[1:4] // 20, 30, 40
	////for i := 0; i < len(slice); i++ {
	////	fmt.Printf("slice[%v]=%v ", i, slice[i])
	////}
	//fmt.Println()
	//// 使用for range 方式遍历切片
	//for i, v := range slice {
	//	fmt.Printf("i=%v v=%v \n", i, v)
	//}
	//slice2 := slice[1:2] // 30
	//slice2[0] = 100  // 因为 arr , slice 和slice2 指向的数据空间是同一个，因此slice2[0]=100，其它的都变化
	//fmt.Println("slice2=", slice2)
	//fmt.Println("slice=", slice)
	//fmt.Println("arr=", arr)
	//
	//fmt.Println()
	//
	// 用 append 内置函数，可以对切片进行动态追加
	//var slice3 []int = []int{100, 200, 300}
	//// 通过 append 直接给 slice3 追加具体的元素
	//slice3 = append(slice3, 400, 500, 600)
	//fmt.Println("slice3", slice3) // 100, 200, 300,400, 500, 600
	//// 通过 append 将切片 slice3 追加给 slice3
	//slice3 = append(slice3, slice3...) // 100, 200, 300,400, 500, 600 100, 200, 300,400, 500, 600
	//fmt.Println("slice3", slice3)

	//切片的拷贝操作
	//切片使用copy内置函数完成拷贝，举例说明
	var slice4 []int = []int{1, 2, 3, 4, 5}
	var slice5 = make([]int, 10)
	copy(slice5, slice4)
	fmt.Println("slice4=", slice4) // 1, 2, 3, 4, 5
	fmt.Println("slice5=", slice5) // 1, 2, 3, 4, 5, 0 , 0 , 0, 0, 0
}
